#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
int main(int argc, char const *argv[])
{
    printf("main进程%d开始执行\n", getpid());
    int val = 100;
    // 创建子进程
    // 创建成功后，系统会依次执行父进程和子进程的代码，只是谁先执行不固定
    // 无论执行父进程还是子进程都是继续往下执行，只是fork的返回值不一样，父进程返回子进程的pid，子进程返回0
    // fork函数执行返回2次，一次父一次子
    pid_t pid = fork();
    if (pid < 0)
    {
        printf("创建子进程失败");
        return -1;
    }
    else if (pid == 0) // 子进程
    {
        val++;
        printf("子进程：%d 父进程id %d val = %d &val = %p\n", getpid(), getppid(), val, &val);
    }
    else // 父进程
    {
        val--;
        printf("父进程：%d 子进程id %d val = %d &val = %p\n", getpid(), pid, val, &val);
    }
    printf("main进程%d结束执行\n", getpid());
    return 0;
}
